// pages/my/my-release-experience-report/index.js
const app = getApp()
const db = wx.cloud.database()
const form = db.collection('form')
Page({
   // 页面的初始数据
  data: {
    record_id: '',  // 存储该记录id
    pageType: '',   // 存储该页面相关类型
    record_info: [],// 存储该记录（可能要删除）
    desc: '',       // 存储修改后的文字信息
    media: [],      // 存储当前页面的照片和视频
    delete_cloud_list: [], //用户删除云端文件的列表
    bool_modify: false, //用户是否修改了记录

    patient_id: '', // 存储该页面病人id（可能要删除）
  },

  // 生命周期函数--监听页面加载
  onLoad: function (options) {
    wx.showLoading({
      title: '加载中...',
      mask: true
    })
  
  // 获取病人基本信息
    wx.cloud.callFunction({
      name: 'wwxFuns3',
      data:({
        name: 'get_record',
        id: options.id
      })
    })
    .then(res => {
      wx.hideLoading()
      this.setData({
        record_info: res.result,
        desc: res.result.form_desc,
        media: res.result.form_media,
        pageType: options.pageType,
        record_id: options.id,
      })
      console.log(res.result)
    })
    .catch(res => {
      console.log('error!')
    })
  },

  // 文字输入内容
  setDesc(event) {
    this.setData({
      desc: event.detail.value
    })
    console.log(this.data.desc)
    console.log(this.data.desc_)
    console.log(this.data.bool_modify)
    this.bool_modify()
  },

  //判断是否修改记录的标志
  bool_modify() {
    if ((this.data.desc != '') && ((this.data.desc != this.data.record_info.form_desc) || (this.data.media.length != this.data.record_info.form_media.length) || (this.data.delete_cloud_list.length != 0))) {
      this.setData({
        bool_modify: true
      })
    } else {
      this.setData({
        bool_modify: false
      })
    }
  },

  // 选择上传：图片-视频 选择框
  actioncnt: function () {
    var _this = this;
    wx.showActionSheet({
      itemList: ['图片', '视频'],
      success: function (res) {
        if (res.tapIndex == 0) {
          _this.chooseImage()
        }
        if (res.tapIndex == 1) {
          _this.chooseVideo()
        }
      },
      fail: function (res) {
        console.log(res.errMsg)
      }
    })
  },

  // 选择照片来源
  chooseImage: function () {
    var _this = this;
    // 获取图片或视频的数量
    let len = this.data.media.length;

    // 在本地选择需上传的图片
    wx.chooseImage({
      count: 9 - len, //图片和视频上传数量之和不超过9
      sizeType: ['original'], //原图
      sourceType: ['album', 'camera'], //可以指定来源是相册还是相机, 默认二者都有
      success: function (res) {
        wx.showLoading({
          title: '上传中',
        })
        // 返回选定照片的本地文件路径列表,tempFilePaths可以作为img标签的scr属性显示图片
        var media_list = [] //加在media末尾的元素
        var img_list = res.tempFilePaths //新添图片路径数组
        for (var i = 0; i < img_list.length; i++) {
          media_list.push({
            url: img_list[i],
            type: "image"
          })
        }
        // 将新图片的数组添加到media尾部
        _this.setData({
          media: _this.data.media.concat(media_list)
        })
        //判断是否到达提交表单的标志
        _this.bool_modify()
        wx.hideLoading()
      },
      fail: function () {
        wx.showToast({
          title: '图片上传失败',
          icon: 'none'
        })
        return;
      }
    })
  },

  // 选择视频来源
  chooseVideo: function () {
    var _this = this;
    // 从本地选择视频
    wx.chooseVideo({
      success: function (res) {
        wx.showLoading({
          title: '上传中',
        })
        // 将视频添加到media头部
        _this.setData({
          media: [{
            url: res.tempFilePath,
            type: "video"
          }].concat(_this.data.media)
        })
        _this.bool_modify()
        wx.hideLoading()
      }
    })
  },

  //预览图片或视频
  //参数res:res.currentTarget.dataset.index即为data-index指定内容
  previewMedia(res) {
    wx.previewMedia({
      sources: this.data.media,
      current: res.currentTarget.dataset.index
    })
  },

  //删除图片或视频
  //参数res:res.currentTarget.dataset.index即为data-index指定内容
  deleteMedia(res) {
    var _this = this;
    var index = res.currentTarget.dataset.index
    var temp_list = this.data.media
    wx.showModal({
      title: '提示',
      content: '确认要删除吗?',
      success: function (res) {
        if (res.confirm) {
          //先判断改图片或视频是否已经在云端，若在云端则需要删除云端文件
          //不在此处删除文件，只是将删除文件路径存入数组，在提交函数submit时删除
          if (temp_list[index].url.startsWith('cloud')) {
            _this.data.delete_cloud_list.push(temp_list[index].url)
          }
          temp_list.splice(index, 1);
        } else if (res.cancel) {
          return
        }
        _this.setData({
          media: temp_list
        })
        _this.bool_modify()
      }
    })
  },

  //函数submit为移植时需要更改的地方
  //移植：其中多处待修改
  submit() {
    var _this = this
    var media = [] //存储云端图片或视频路径的数组
    var matchs = []
    var index = 0
    wx.showLoading({
      title: '上传中...',
    })

    // 上传图片或视频到云端
    Promise.all(this.data.media.map((item) => {
        //如果已经在云端，则无需上传直接返回
        if (item.url.startsWith('cloud')) {
          matchs[index++] = 0
          return item
        } else {
          matchs[index++] = 1
          return wx.cloud.uploadFile({
            // 移植：可更改视频和图片上传云端的路径，此处默认为task文件夹，更改'task/'部分即可
            cloudPath: 'record/' + Date.now() + (index) + item.url.match(/\.[^.]+?$/)[0], // 文件名称 
            filePath: item.url,
          })
        }
      }))
      .then(res => {
        //获取任务的media
        for (var i = 0; i < res.length; i++) {
          //matchs[i]可以区分是新增的元素还是原有的，此处是修改任务或表单时才有效
          if (matchs[i] == 0) {
            media.push(res[i])
          } else {
            media.push({
              url: res[i].fileID,
              type: _this.data.media[i].type
            })
          }
        }
        //更新media:将其中的url从本地路径变为云存储路径
        _this.setData({
          media: media
        })

        var that = _this
        //删除已在云存储删除列表的文件
        if (_this.data.delete_cloud_list.length != 0) {
          wx.cloud.deleteFile({
            fileList: _this.data.delete_cloud_list
          })
        }
        
        //移植：需要新增或更改记录的数据库操作
        db.collection('form').doc(this.data.record_id).update({
            data: {
              form_desc: that.data.desc,
              form_media: that.data.media
            }
          })
          .then(res => {
            // 成功则显示成功
            //移植：上传成功提示信息，改变wx.showToast的title
            wx.hideLoading()
            wx.showToast({
              title: '修改成功',
              icon: 'success'
            })
            // 清空本地数据
            // 移植：此处用于清空本地数据或返回上一层
            wx.navigateBack({
              delta: -1,
            })
          })
      })
  },

})
